import Vue from 'vue'
// 导入数据共享插件vuex并注册
import Vuex from 'vuex'
Vue.use(Vuex)

// 获取localStorage中的商品数组
var goods = JSON.parse(localStorage.getItem('goods') || '[]');

// 向外输出store实例
export default new Vuex.Store({
  state: {
    // 用一个数组存放商品信息的{id和数量}
    car: goods
  },
  mutations: {
    // 添加到购物车功能
    addToCart(state, goods) {
      // 在 push 到 car 之前，先检查 购物车中，之前有没有相同Id的商品数据，如果有，则只修改count值，否则，直接push
      var flag = false;
      state.car.some(item => {
          var id = parseInt(goods.id);
          if (item.id === id) {
            // 如果有对应商品，则将数量叠加
            item.count += goods.count;
            flag = true;
            return true;
          }
        })
        // 如果没有对应商品，则添加进数组
      if (!flag) {
        state.car.push(goods);
      }
      // 每当修改了购物车，都把最新的商品保存到本地
      localStorage.setItem('goods', JSON.stringify(state.car));
    },
    // 购物车中商品数量改变同步到store的功能
    changeCount(state, goods) {
      console.log(goods);
      state.car.some(item => {
          // 根据id改变数量
          if (item.id === goods.id) {
            item.count = goods.count;
            return true;
          }
        })
        // 每当修改了购物车，都把最新的商品保存到本地
      localStorage.setItem('goods', JSON.stringify(state.car));
    },
    // 根据id删除对应商品信息的功能
    delGoodsFromId(state, id) {
      // some方法必须返回true
      state.car.some((item, i, arr) => {
          if (item.id === id) {
            arr.splice(i, 1);
            return true;
          }
        })
        // 每当修改了购物车，都把最新的商品保存到本地
      localStorage.setItem('goods', JSON.stringify(state.car));
    }
  }
})